package com.tulingxueyuan.mall.modules.pms.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tulingxueyuan.mall.common.api.CommonPage;
import com.tulingxueyuan.mall.common.api.CommonResult;
import com.tulingxueyuan.mall.modules.pms.model.PmsProductCategory;
import com.tulingxueyuan.mall.modules.pms.model.PmsProductCategoryAttributeRelation;
import com.tulingxueyuan.mall.modules.pms.model.PmsProductCategoryDto;
import com.tulingxueyuan.mall.dto.PmsProductCategoryJiDto;
import com.tulingxueyuan.mall.modules.pms.service.PmsProductCategoryAttributeRelationService;
import com.tulingxueyuan.mall.modules.pms.service.PmsProductCategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 产品分类 前端控制器
 * </p>
 *
 * @author SiXiaoLong
 * @since 2022-10-13
 */
@RestController
@RequestMapping("/productCategory")
public class PmsProductCategoryController {
    @Autowired
    PmsProductCategoryService pmsProductCategoryService;

    @Autowired
    PmsProductCategoryAttributeRelationService relationService;
        /**
        * 获取商品分类列表
        */
    @GetMapping("/list/{parentId}")
    public CommonResult<CommonPage<PmsProductCategory>> list(@PathVariable Long parentId,
                                                             @RequestParam(value = "pageNum") Integer pageNum,
                                                             @RequestParam(value = "pageSize") Integer pageSize){

        Page page = pmsProductCategoryService.getList(parentId, pageNum, pageSize);
        if (pageNum > page.getPages()){
            page = pmsProductCategoryService.getList(parentId, (int)page.getPages(), pageSize);
        }
        return CommonResult.success(CommonPage.restPage(page));
//        return CommonResult<CommonPage<PmsProductCategory>>.success(restPage);
    }

    /**
     * 是否显示
     */
    @PostMapping("/update/showStatus")
    public CommonResult setStatus(@RequestBody Map map){
        List<Long> ids = (List) map.get("ids");
        LambdaUpdateWrapper<PmsProductCategory> lqw = new LambdaUpdateWrapper<>();
        lqw.set(PmsProductCategory::getShowStatus,map.get("showStatus").toString());
        lqw.in(PmsProductCategory::getId,ids);
        boolean update = pmsProductCategoryService.update(lqw);
        if (update){
            return CommonResult.success(update);
        }else {
            return CommonResult.failed("更新失败");
        }
    }
    /**
     * 导航栏是否显示
     */
    @PostMapping("/update/navStatus")
    public CommonResult setNavStatus(@RequestBody Map map){
        List<Long> ids = (List<Long>) map.get("ids");
        LambdaUpdateWrapper<PmsProductCategory> lqw = new LambdaUpdateWrapper<>();
        lqw.set(PmsProductCategory::getNavStatus,map.get("navStatus").toString());
        lqw.in(PmsProductCategory::getId,ids);
        boolean update = pmsProductCategoryService.update(lqw);
        if (update){
            return CommonResult.success(update);
        }else {
            return CommonResult.failed("更新失败");
        }
    }

    /**
     *  删除
     */
    @PostMapping("/delete/{id}")
    public CommonResult delete(@PathVariable Long id){
        boolean b = pmsProductCategoryService.removeById(id);
        if (b){
            return CommonResult.success(b);
        }else {
            return CommonResult.failed("删除失败");
        }
    }

    /*
    * 根据id查数据
    * */
    @GetMapping("/{id}")
    public CommonResult getById(@PathVariable Long id){
        PmsProductCategory serviceById = pmsProductCategoryService.getById(id);
        return CommonResult.success(serviceById);
    }

    /**
     * 修改商品分类
     */
    @PostMapping("/update/{id}")
    @Transactional
    public CommonResult UpdateById(@PathVariable Long id, @RequestBody PmsProductCategoryDto pmsProductCategoryDto){
        LambdaQueryWrapper<PmsProductCategory> lqw = new LambdaQueryWrapper<>();
        lqw.eq(PmsProductCategory::getId, id);
        boolean update = pmsProductCategoryService.update(pmsProductCategoryDto, lqw);

//        pmsProductCategoryDto.setProductCount(0);
        if(pmsProductCategoryDto.getParentId()==0){
            pmsProductCategoryDto.setLevel(0);
        }else {
//             如果有多级分类，根据parentId查出商品分类获取level+1 当前只有二级分类所以1就行
            pmsProductCategoryDto.setLevel(1);
        }
        pmsProductCategoryService.updateById(pmsProductCategoryDto);
//        先查出来PmsProductCategoryAttributeRelation表中分类对应的绑定删除全部
        LambdaQueryWrapper<PmsProductCategoryAttributeRelation> lqw2 = new LambdaQueryWrapper<>();
        lqw2.eq(PmsProductCategoryAttributeRelation::getProductCategoryId,pmsProductCategoryDto.getId());
        relationService.remove(lqw2);
//        之后再保存到PmsProductCategoryAttributeRelation中
        List<String> productAttributeIdList = pmsProductCategoryDto.getProductAttributeIdList();
        for (String attrId : productAttributeIdList) {
            PmsProductCategoryAttributeRelation pmsProductCategoryAttributeRelation = new PmsProductCategoryAttributeRelation();
            pmsProductCategoryAttributeRelation.setProductCategoryId(pmsProductCategoryDto.getId());
            pmsProductCategoryAttributeRelation.setProductAttributeId(Long.valueOf(attrId));
            relationService.save(pmsProductCategoryAttributeRelation);
        }
        if (update){
            return CommonResult.success(update);
        }else {
            return CommonResult.failed("修改失败");
        }

    }

//    /**
//     * 添加商品分类
//     */
//    @PostMapping("/create")
//    public CommonResult createCategory(@RequestBody PmsProductCategoryDto pmsProductCategoryDto){
//        boolean save = pmsProductCategoryService.save(pmsProductCategoryDto);
//        if (save){
//            return CommonResult.success(save);
//        }else {
//            return CommonResult.failed("创建失败");
//        }
//    }

    /**
     * 创建商品分类
     */
    @PostMapping("/create")
    @Transactional
    public CommonResult create(@RequestBody PmsProductCategoryDto pmsProductCategoryDto){
//       保存商品分类
//        PmsProductCategory pmsProductCategory = new PmsProductCategory();
//        拷贝对象
//        BeanUtils.copyProperties(pmsProductCategory,pmsProductCategoryDto);
        pmsProductCategoryDto.setProductCount(0);
        if(pmsProductCategoryDto.getParentId()==0){
            pmsProductCategoryDto.setLevel(0);
        }else {
//             如果有多级分类，根据parentId查出商品分类获取level+1 当前只有二级分类所以1就行
            pmsProductCategoryDto.setLevel(1);
        }
        pmsProductCategoryService.save(pmsProductCategoryDto);
        List<String> productAttributeIdList = pmsProductCategoryDto.getProductAttributeIdList();
        for (String attrId : productAttributeIdList) {
            PmsProductCategoryAttributeRelation pmsProductCategoryAttributeRelation = new PmsProductCategoryAttributeRelation();
            pmsProductCategoryAttributeRelation.setProductCategoryId(pmsProductCategoryDto.getId());
            pmsProductCategoryAttributeRelation.setProductAttributeId(Long.valueOf(attrId));
            relationService.save(pmsProductCategoryAttributeRelation);
        }
        return CommonResult.success("保存成功");
    }

    /**
     *获取商品一级分类和二级分类的下拉级联数据
     */
    @GetMapping("/list/withChildren")
    public CommonResult getWithChildren(){
       List<PmsProductCategoryJiDto> list = pmsProductCategoryService.getWithChildren();
       return CommonResult.success(list);
    }
}

